﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace HMS
{
    public partial class ucPhongkham : UserControl
    {
        private string sGetID;
        private SqlConnection con = new SqlConnection(FRM_Manhinhchinh.sConn);
        private SqlDataAdapter dataAp;
        private int iIndex;
        private bool bUpdate, bCheckExist;
        private string sTenPK_old;
        private List<string> list;
        private SqlCommand cmdInsert, cmdUpdate;
        private DataTable dataTable;

        public ucPhongkham()
        {
            InitializeComponent();
            load_data();
        }// end

        public void load_data()
        {
            GetDataTable("select Department_ID , Department_Name, Department_Cost, Department_Status from tblDepartment where Kind_ID ='1'");
            gridPhongKham.DataSource = dataTable;
        }// end load_data

        // Hàm lấy dữ liệu từ câu lệnh query sau đó gán vào datatable
        public DataTable GetDataTable(string sql)
        {
            // Tạo dataApdapter, thực hiện câu lệnh query
            dataAp = new SqlDataAdapter(sql, con);
            // Đổ dữ liệu vào DataTable
            dataTable = new DataTable();
            dataAp.Fill(dataTable);
            return dataTable;
        }// end GetDataTable

        // Gán dữ liệu từ CSDL lên giao diện
        public void Set_data()
        {
            iIndex = gridView1.FocusedRowHandle;
            sGetID = gridView1.GetRowCellValue(iIndex, "Department_ID").ToString();
            string sSQl = " select Department_ID, Department_Name,Department_Cost, Department_Status from tblDepartment where Department_ID = '" + sGetID + "'";
            GetDataTable(sSQl);
            //Gán text cho textbox
            txtMaphongkham.Text = dataTable.Rows[0]["Department_ID"].ToString();
            txtTenphongkham.Text = dataTable.Rows[0]["Department_Name"].ToString();
            txtGiaphongkham.Text = dataTable.Rows[0]["Department_Cost"].ToString();
            // Đọc từ DB set true, false cho nút check "Kích hoạt"
            if (dataTable.Rows[0]["Department_status"].ToString() == "True")
                ckKichhoat.Checked = true;
            else ckKichhoat.Checked = false;
        }// end Set_data

        // Clear nội dung textbox
        private void clear_Contents()
        {
            txtMaphongkham.Text = "";
            txtGiaphongkham.Text = "";
            txtTenphongkham.Text = "";
            ckKichhoat.Checked = false;
        }// end clear_Contents

        // Event click cho nút Thêm phòng khám
        private void btnThem_Click(object sender, EventArgs e)
        {
            clear_Contents(); // Gọi hàm clear_Contents()
            txtMaphongkham.Text = NextID();
            txtTenphongkham.Enabled = true;
            txtGiaphongkham.Enabled = true;
            ckKichhoat.Enabled = true;
            bUpdate = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            // Clear dữ liệu vừa lưu của 2 textbox
            txtTenphongkham.AutoCompleteCustomSource.Clear();
            txtGiaphongkham.AutoCompleteCustomSource.Clear();
            // Gán dữ liệu từ DB vào 2 textbox
            GetDataTable("select department_name, department_cost from tbldepartment");
            foreach (DataRow item in dataTable.Rows)
            {
                txtTenphongkham.AutoCompleteCustomSource.Add(item["department_name"].ToString());
                txtGiaphongkham.AutoCompleteCustomSource.Add(item["department_cost"].ToString());
            }// end foreach
        }// end btnThem_Click

        // Event click cho nút Cập nhật
        private void btnCapnhat_Click(object sender, EventArgs e)
        {
            Set_data(); // Gọi hàm gán dữ liệu từ CSDL lên giao diện
            txtGiaphongkham.Enabled = true;
            txtTenphongkham.Enabled = true;
            ckKichhoat.Enabled = true;
            bUpdate = true;
            sTenPK_old = txtTenphongkham.Text;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
        }// end btnCapnhat_Click

        // Event click cho gridPhongKham
        private void gridPhongKham_Click(object sender, EventArgs e)
        {
            // enable button            
            txtTenphongkham.Enabled = false;
            txtGiaphongkham.Enabled = false;
            ckKichhoat.Enabled = false;
            btnLuu.Enabled = false;
            btnHuy.Enabled = false;
            Set_data(); // Gọi hàm gán dữ liệu từ CSDL lên giao diện
        }// end gridPhongKham_Click

        // Mã tự động tăng hiện trên textbox
        private string NextID()
        {
            GetDataTable("select max(department_id) as department_id from tbldepartment where kind_id = '1'");
            string sResult = dataTable.Rows[0]["department_id"].ToString();
            if (sResult == "") return "P1";
            else return "P" + (int.Parse(sResult.Remove(0, 1)) + 1);
        }// end NextID()

        // Kiểm tra phòng khám đã tồn tại trong CSDL
        private bool Check_Exist(string sTen)
        {
            GetDataTable("select * from tbldepartment where department_name = N'"
                + sTen + "' and kind_id = '1'");
            if (dataTable.Rows.Count == 0) bCheckExist = false;
            else bCheckExist = true;
            return bCheckExist;
        }// end Check_Exist

        // Event click cho nút Lưu
        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (txtMaphongkham.Text == "" || txtTenphongkham.Text == "")
                MessageBox.Show("Vui lòng nhập dữ liệu vào ô trống!", "Thông báo!", MessageBoxButtons.OK);
            else
            {
                // Khai báo biến
                list = new List<string>();
                string sMaPK = txtMaphongkham.Text,
                        sTenPK = txtTenphongkham.Text,
                        sGiaPK = txtGiaphongkham.Text,
                        sStatus;
                // Trạng thái là Lưu người dùng hay Tạo người dùng
                switch (bUpdate)
                {
                    // Trạng thái tạo mới
                    case false:
                        SqlConnection conInsert = new SqlConnection(FRM_Manhinhchinh.sConn); // Tạo kết nối DB
                        if (ckKichhoat.Checked == true) sStatus = "True";
                        else sStatus = "False";
                        string sCmdInsertClinic = "insert into tblDepartment values ('','" + sMaPK + "',N'"
                            + sTenPK + "','1','" + sStatus + "','" + sGiaPK + "')";
                        // Phòng khám chưa tồn tại trong CSDL
                        if (Check_Exist(sTenPK) == false && sGiaPK != "")
                        {
                            conInsert.Open(); // Mở kết nối DB
                            cmdInsert = new SqlCommand(sCmdInsertClinic, conInsert); // Câu lệnh Insert dữ liệu vào DB                    
                            cmdInsert.ExecuteNonQuery(); // Thực thi lệnh SqlCommand
                            conInsert.Close(); // Đóng kết nối DB
                            MessageBox.Show("Tạo mới phòng khám thành công !", "Thông báo"
                                , MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            load_data(); // Load lại data lên gridControl
                        }// end if
                        else MessageBox.Show("Dữ liệu nhập vào không đúng !", "Thông báo",
                            MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        break;
                    //Trạng thái cập nhật.
                    case true:
                        SqlConnection conUpdate = new SqlConnection(FRM_Manhinhchinh.sConn); // Tạo kết nối DB
                        if (ckKichhoat.Checked == true) sStatus = "True";
                        else sStatus = "False";
                        string sCmdUpdateClinic = "update tblDepartment set Department_Name = N'" +
                            sTenPK + "', Department_status = '" + sStatus
                            + "', Department_Cost = '" + sGiaPK + "' where Department_ID = '" + sMaPK + "'";
                        // Phòng khám chưa tồn tại trong CSDL
                        if ((Check_Exist(sTenPK) == false || sTenPK == sTenPK_old) && sGiaPK != "")
                        {
                            conUpdate.Open(); // Mở kết nối DB
                            cmdUpdate = new SqlCommand(sCmdUpdateClinic, conUpdate); // Câu lệnh Insert dữ liệu vào DB                    
                            cmdUpdate.ExecuteNonQuery(); // Thực thi lệnh SqlCommand
                            conUpdate.Close(); // Đóng kết nối DB
                            MessageBox.Show("Cập nhật phòng khám thành công !",
                                "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            load_data(); // Load lại data lên gridControl
                        }// end if
                        else MessageBox.Show("Dữ liệu nhập vào không đúng !",
                            "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        break;
                }// end switch
            }// end else
        }// end btnLuu_Click

        // Event click cho nút Hủy
        private void btnHuy_Click(object sender, EventArgs e)
        {
            if (bUpdate == false)
            {
                DialogResult dr = MessageBox.Show("Bạn chắc chắn muốn hủy thao tác này ?",
                    "Thông báo", MessageBoxButtons.YesNo);
                if (dr == DialogResult.Yes) btnThem_Click(null, null);
                else return;
            }// end if
            else
            {
                // Kiểm tra dữ liệu có thay đổi chưa
                DialogResult dr = MessageBox.Show("Bạn chắc chắn muốn hủy thao tác này ?",
                    "Thông báo", MessageBoxButtons.YesNo);
                if (dr == DialogResult.Yes) btnCapnhat_Click(null, null);
                else return;
            }// end else
        }// end btnHuy_Click

        // Event double click gridPhongKham
        private void gridPhongKham_DoubleClick(object sender, EventArgs e)
        {
            btnCapnhat_Click(null, null);
        }// end gridPhongKham_DoubleClick

        private void txtGiaphongkham_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar)) e.Handled = true;
        }// end txtGiaphongkham_KeyPress

        private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            if (e.Column == sothutu) e.DisplayText = (e.RowHandle + 1).ToString();
        }// end gridPhongKham_DoubleClick
    }// end
}// end namespace